package gui;

import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;

import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.SwingConstants;

import util.Datum;


public class PeriodePaneel extends DomeinPaneel
{
/*Attributen*/
	private DatumPaneel beginPaneel;
	private DatumPaneel eindPaneel;
	private JLabel lblFout;
	private JButton btnOk;
	private boolean klaar;

/*Constructor*/
	public PeriodePaneel(GuiController controller)
	{
		super(controller);
		maakPaneel();
	}
	private void maakPaneel()
	{
		//paneel eigenschappen
		this.setLayout(null);
		this.setBorder(BorderFactory.createTitledBorder(berichten.getString("periode")));
		this.setPreferredSize(new java.awt.Dimension(387, 70));

		System.out.print(berichten.getString("begindatum"));
		//begindatumpaneel
		beginPaneel = new DatumPaneel(guiController,berichten.getString("begindatum"));
		beginPaneel.setBounds(5, 19, 208, 32);
		this.add(beginPaneel);

		//einddatumpanel
		eindPaneel = new DatumPaneel(guiController,berichten.getString("einddatum"));
		eindPaneel.setBounds(208, 19, 208, 32);
		this.add(eindPaneel);

		//foutlabel
		lblFout = new JLabel();
		lblFout.setForeground(Color.red);
		lblFout.setBounds(10, 46, 366, 18);
		lblFout.setVerticalTextPosition(JLabel.TOP);
		this.add(lblFout);

		//ok knop
		btnOk = new JButton();
		btnOk.setText(berichten.getString("periode_bevestigen"));
		btnOk.setBounds(420, 23, 145, 20);
		btnOk.addActionListener(new BtnOkListener());
		this.add(btnOk);
	}

/*Actionlistener*/
	private class BtnOkListener implements ActionListener
	{
		public void actionPerformed(ActionEvent arg0)
		{
			try{
				//controle op verschil in datums
				if(beginPaneel.haalDatum().datumVerschil(eindPaneel.haalDatum())>0)
				{
					throw new IllegalArgumentException("De begindatum valt later dan de einddatum!");
				}
				else
				{
					domeinController.getHuurovereenkomst().setBeginDatum((beginPaneel.haalDatum()));
					domeinController.getHuurovereenkomst().setEindDatum((eindPaneel.haalDatum()));
					guiController.enableAutoSelectie();
					lblFout.setText("");
					klaar=true;
				}
			}
			catch(Exception e)
			{
				lblFout.setText(e.getMessage());
			}
		}
	}

/*Getters*/
	public DatumPaneel getBeginPaneel()
	{
		return beginPaneel;
	}
	public DatumPaneel getEindPaneel()
	{
		return eindPaneel;
	}
	public JLabel getLblFout()
	{
		return lblFout;
	}

/*Private klasse*/
	private class DatumPaneel extends DomeinPaneel
	{
		/*Attributen*/
		private String labelTypeDatum;
		private JLabel labelPeriode;
		private JTextField txfDag;
		private JTextField txfMaand;
		private JTextField txfJaar;
		private JLabel lblTussenschot1;
		private JLabel lblTussenschot2;

		/*Constructor*/
		public DatumPaneel(GuiController controller,String labelTypeDatum)
		{
			super(controller);
			this.setLabelTypeDatum(labelTypeDatum);
			maakPaneel();
		}

		/*Methodes*/
		private void maakPaneel()
		{
			Datum datum = new Datum();
			IOListener invoer = new IOListener();

			//paneel eigenschappen
			FlowLayout layout = new FlowLayout();
			layout.setAlignment(FlowLayout.LEFT);
			this.setLayout(layout);

			//beschrijvingslabel eigenschappen
			labelPeriode = new JLabel();
			labelPeriode.setText(labelTypeDatum +": ");
			this.add(labelPeriode);

			//dagveld eigenschappen
			txfDag = new JTextField(2);
			txfDag.setText(datum.getDag());
			txfDag.setHorizontalAlignment(SwingConstants.RIGHT);
			txfDag.addFocusListener(invoer);
			this.add(txfDag);

			//tussenschot1 eigenschappen
			lblTussenschot1 = new JLabel();
			lblTussenschot1.setText("/");
			this.add(lblTussenschot1);

			//maandveld eigenschappen
			txfMaand = new JTextField(2);
			txfMaand.setText(datum.getMaand());
			txfMaand.setHorizontalAlignment(SwingConstants.RIGHT);
			txfMaand.addFocusListener(invoer);
			this.add(txfMaand);

			//tussenschot1 eigenschappen
			lblTussenschot2 = new JLabel();
			lblTussenschot2.setText("/");
			this.add(lblTussenschot2);

			//jaarveld eigenschappen
			txfJaar = new JTextField(3);
			txfJaar.setText(datum.getJaar());
			txfJaar.setHorizontalAlignment(SwingConstants.RIGHT);
			txfJaar.addFocusListener(invoer);
			this.add(txfJaar);
		}
		public Datum haalDatum() throws IllegalArgumentException
		{
			int d=0,m=0,j=0;
		//Controle op lege velden
			if(txfDag.getText().equals("") || txfMaand.getText().equals("") || txfJaar.getText().equals(""))
				throw new IllegalArgumentException("Gelieve de datum volledig in te vullen! (" + labelTypeDatum.toLowerCase() +")");

		//Controle op geldige dag
			if(!txfDag.getText().equals("")){
				try{
					d = Integer.parseInt(txfDag.getText());
				}
				catch(NumberFormatException e)
				{
					throw new IllegalArgumentException("De dag bestaat uit maximaal 2 cijfers! (" + labelTypeDatum.toLowerCase() +")");
				}
				catch(IllegalArgumentException e)
				{
					throw new IllegalArgumentException("Vul de dag correct in! (" + labelTypeDatum.toLowerCase() +")");
				}
			}

		//Controle op geldig maand
			if(!txfMaand.getText().equals(""))
			{
				try{
					m = Integer.parseInt(txfMaand.getText());
				}
				catch(NumberFormatException e)
				{
					throw new IllegalArgumentException("De maand bestaat uit maximaal 2 cijfers! (" + labelTypeDatum.toLowerCase() +")");
				}
				catch(IllegalArgumentException e)
				{
					throw new IllegalArgumentException("Vul de maand correct in! (" + labelTypeDatum.toLowerCase() +")");
				}
			}

		//Controle op geldig jaar
			if(!txfJaar.getText().equals(""))
			{
				try{
					j = Integer.parseInt(txfJaar.getText());
				}
				catch(NumberFormatException e)
				{
					throw new IllegalArgumentException("Het jaar bestaat uit 4 cijfers! (" + labelTypeDatum.toLowerCase() +")");
				}
				catch(IllegalArgumentException e)
				{
					throw new IllegalArgumentException("Vul het jaar correct in! (" + labelTypeDatum.toLowerCase() +")");
				}
			}

		//Controle op datum die hoger is dan vandaag
			try{
				Datum datum = new Datum(d,m,j);
				datum.controleActueleDatum();
				return datum;
			}
			catch(IllegalArgumentException e)
			{
				throw new IllegalArgumentException(e.getMessage() + " (" + labelTypeDatum.toLowerCase() +")");
			}
		}

		/*Actionlistener*/
		private class IOListener implements FocusListener
		{
			public void focusGained(FocusEvent arg0)
			{
				//this.selectAll();
				if(klaar==true)
				{
					guiController.disableAutoSelectie();
					lblFout.setText("Bevestig de periode aub opnieuw!");
					klaar=false;
				}
			}
			public void focusLost(FocusEvent arg0)
			{
			}
		}
		/*Getters & setters*/
		public String getLabelTypeDatum()
		{
			return labelTypeDatum;
		}
		public void setLabelTypeDatum(String label)
		{
			this.labelTypeDatum = label;
		}
		public JLabel getLabelPeriode()
		{
			return labelPeriode;
		}
		public void setLabelPeriode(JLabel labelWanneer)
		{
			this.labelPeriode = labelWanneer;
		}
		public JLabel getLblTussenschot1()
		{
			return lblTussenschot1;
		}
		public void setLblTussenschot1(JLabel lblTussenschot1)
		{
			this.lblTussenschot1 = lblTussenschot1;
		}
		public JLabel getLblTussenschot2()
		{
			return lblTussenschot2;
		}
		public void setLblTussenschot2(JLabel lblTussenschot2)
		{
			this.lblTussenschot2 = lblTussenschot2;
		}
		public JTextField getTxfDag()
		{
			return txfDag;
		}
		public void setTxfDag(JTextField txfDag)
		{
			this.txfDag = txfDag;
		}
		public JTextField getTxfJaar()
		{
			return txfJaar;
		}
		public void setTxfJaar(JTextField txfJaar)
		{
			this.txfJaar = txfJaar;
		}
		public JTextField getTxfMaand()
		{
			return txfMaand;
		}
		public void setTxfMaand(JTextField txfMaand)
		{
			this.txfMaand = txfMaand;
		}
	}
}
